package net.lzzy.practices.web.models;

import lombok.Getter;
import lombok.Setter;
import net.lzzy.practices.entities.User;
import net.lzzy.practices.utils.AuthUtils;

import java.util.Date;
import java.util.UUID;

/**
 * @author zly on 2022/5/11
 * Description:
 */
@Getter
@Setter
public class VmUser {
    private UUID id;
    private String nickName;
    private String userName;
    private String email;
    private String phone;
    private String avatar;
    private int type;
    private String token;
    private Date lastLogin;

    private VmUser() {
    }

    private VmUser(User user) {
        id = user.getId();
        nickName = user.getNickName();
        userName = user.getUserName();
        email = user.getEmail();
        phone = user.getPhone();
        avatar = user.getAvatar();
        type = user.getType();
        lastLogin = new Date();
        token = UUID.randomUUID().toString();
        AuthUtils.USERS.add(this);
    }

    public static VmUser apiLogin(User user) {
        VmUser vmUser = AuthUtils.USERS
                .stream()
                .filter(u -> u.userName.equals(user.getUserName()))
                .findFirst()
                .orElse(null);
        if (vmUser == null) {
            vmUser = new VmUser(user);
        } else {
            vmUser.lastLogin = new Date();
        }
        return vmUser;
    }

    public static VmUser create(User user, boolean admin) {
        VmUser vm = new VmUser();
        vm.setId(user.getId());
        vm.setNickName(user.getNickName());
        vm.setAvatar(user.getAvatar());
        vm.setEmail(user.getEmail());
        vm.setToken("");
        vm.setType(User.TYPE_STUDENT);
        if (admin) {
            vm.setPhone(user.getPhone());
            vm.setUserName(user.getUserName());
            vm.setType(user.getType());
        }
        return vm;
    }
}
